package edu.gduf.dao;

import edu.gduf.domain.Activity;
import edu.gduf.domain.Catalog;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * @author 谢佳豪
 * @data 2020/10/9 - 17:32
 * @target
 */
@Repository
public interface ActivityDao {

    /**
     * 活动发布（添加活动信息）
     * @param activity 前端表单提交activity数据
     * @return 1为成功 0为失败
     */
    int addActivity(Activity activity);

    /**
     * 查询分类目录-activity
     * @return
     */
    List<Catalog> catalogList();

    /**
     * 活动查询（全部-分页）
     * @param startIndex 从第x开始查询的下标值
     * @param pageSize 一页数据的数据量
     * @return 活动数据列表
     */
    List<Activity> selectActivityList(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 活动数量查询
     * @return 活动数量
     */
    Integer totalNumber();

    /**
     * 活动查询（条件-分页）
     * @param cid 分类目录的id
     * @param startIndex 从第x开始查询的下标值
     * @param pageSize 一页数据的数据量
     * @return cid-活动数据列表
     */
    List<Activity> selectActivitiesByCid(@Param("cid") Integer cid, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 活动数量查询
     * @param cid 分类目录id
     * @return 活动数量
     */
    Integer totalNumberByCid(Integer cid);

    /**
     * 根据组织id查询其所拥有的活动信息（条件-分页）
     * @param aid association表主键id
     * @param startIndex 从第x开始查询的下标值
     * @param pageSize 一页数据的数据量
     * @return aid-活动数据列表
     */
    List<Activity> selectActivitiesByAid(@Param("aid") Integer aid, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 查询组织（用户发布的活动数量）
     * @param aid
     * @return
     */
    Integer totalNumberByAid(Integer aid);


    /**
     * 根据activity_id查询单条活动详细信息
     * @param id activity表主键id
     * @return activity
     */
    Activity selectActivityById(Integer id);

    /**
     * 根据title模糊查询活动信息数据
     * @param title 标题信息
     * @param startIndex 开始查询的下标值
     * @param pageSize 一页数据量
     * @return activity
     */
    List<Activity> selectActivitiesByTitle(@Param("title") String title, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);

    /**
     * 根据title模糊查询活动数量
     * @param title
     * @return
     */
    Integer totalNumberByTitle(String title);

    /**
     * 活动更新
     * @param activity 活动对象信息
     * @return update-result
     */
    Integer updateActivity(Activity activity);

    /**
     * 根据id 增加浏览量数据
     * @param id activity主键id
     * @param view 浏览量
     * @return add-result
     */
    Integer addViews(@Param("view") Integer view, @Param("id") Integer id);

    /**
     * 根据activity_id 删除活动信息
     * @param id activity_id
     * @return delete-result
     */
    Integer delete(Integer id);

    /**
     * 选择合适的用户，减少招募人数需求
     * @param population 招募人数
     * @param id activity_id
     * @return reduce-result
     */
    void reducePopulation(@Param("population") Integer population, @Param("id") Integer id);

    /**
     * 查询list组队成员
     * @param id
     */
    String selectList(Integer id);

    /**
     * 根据id更新list组队成员
     * @param id
     * @param list
     */
    void updateList(@Param("id") Integer id, @Param("list") String list);


    /**
     * 根据activity_id，进行修改发布状态
     * @param status 活动状态
     * @param id activity_id
     * @return update-result
     */
    Integer updateStatus(@Param("status") Integer status, @Param("id") Integer id);

    /**
     * 根据uid查询主题数
     * @param uid
     * @return
     */
    Integer searchNum(Integer uid);
}
